package case12

import (
	"encoding/json"
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

func Test() {

	fmt.Println("🎯示例十二：获取JSON参数")

	r := gin.Default()

	r.POST("/addUser", func(c *gin.Context) {

		b, _ := c.GetRawData() // 从c.Request.Body读取请求数据

		// 定义map 或结构体接收
		var m map[string]interface{}
		// 将参数转map
		_ = json.Unmarshal(b, &m)

		// 响应请求参数
		c.JSON(http.StatusOK, m)
	})

	// c.BindJSON 会自动解析参数，若解析失败返回错误
	r.POST("/addUser2", func(c *gin.Context) {

		var m map[string]interface{}

		err := c.BindJSON(&m)
		if err != nil {
			c.JSON(http.StatusOK, gin.H{"message": err})
			return
		}

		c.JSON(http.StatusOK, m)
	})

	//  c.ShouldBindJSON()  更灵活，不会自动返回错误 ,需要手动处理错误情况
	r.POST("/addUser3", func(c *gin.Context) {

		var m map[string]interface{}

		err := c.ShouldBindJSON(&m)
		if err != nil {
			c.JSON(http.StatusOK, gin.H{"message": err})
			return
		}

		c.JSON(http.StatusOK, m)
	})

	r.Run(":60000")

}
